home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / kcl.lha / c / sys.c < prev    next >
C/C++ Source or Header  |  1987-06-04  |  2KB  |  104 lines

  1. /*
  2. (C) Copyright Taiichi Yuasa and Masami Hagiya, 1984.  All rights reserved.
  3. */
  4.  
  5. /*
  6.     sys.c
  7.     DG-SPECIFIC
  8. */
  9.  
  10. #include "include.h"
  11.  
  12. #define $ERMSG 0311
  13. #define BUFLN 128
  14.  
  15. sys_emes(ecode)
  16. int    ecode;
  17. {
  18.     int    ac1,ac2;
  19.     int    ier;
  20.     int    i;
  21.     char    mess_buff[BUFLN];
  22.  
  23.     getemes(ecode, mess_buff);
  24.  
  25.     vs_push(make_simple_string(mess_buff));
  26.     FEerror("~@(~A~).", 1, vs_head);
  27. }
  28.  
  29. getemes(ecode, buff)
  30. int    ecode;
  31. char    *buff;
  32. {
  33.     int    ac0, ac1, ac2, ac3;
  34.  
  35.     for (ac0 = 0; ac0 < BUFLN; ac0++)
  36.         buff[ac0] = '\0';
  37.  
  38.     ac0 = ecode;
  39.     ac1 = BUFLN * 0400 + 0377;
  40.     ac2 = buff;
  41.     if (sys($ERMSG, &ac0, &ac1, &ac2))
  42.         sprintf(buff, "System error, code : %o", ecode);
  43. }
  44.  
  45. #define $PNAME    0116
  46.  
  47. char    mypid[4] = "000\0";
  48.  
  49. get_pid()
  50. {
  51.     int    ac0, ac1, ac2, ier, i;
  52.  
  53.     ac0 = 0;
  54.     ac1 = -1;    /* get my pid */
  55.     sys($PNAME, &ac0, &ac1, &ac2);        /* ignore error */
  56.  
  57.     for (i=2; i >= 0; i--) {
  58.         ac0 = ac1 % 10;
  59.         ac1 = ac1 / 10;
  60.         mypid[i] = ac0 + '0';
  61.         }
  62. }
  63.  
  64. copypid(buffp)
  65. char    *buffp;
  66. {
  67.     int    i;
  68.  
  69.     for (i=0; i <= 2; i++) buffp[i] = mypid[i];
  70. }
  71.  
  72. #define $RUNTM 030
  73.  
  74. runtime()
  75. {
  76.     int    pack[4];
  77.     int    ac0, ac1, ac2, ier;
  78.         
  79.     ac0 = -1;
  80.     ac2 = pack;
  81.     sys($RUNTM, &ac0, &ac1, &ac2);
  82.     return(pack[1]);
  83. }
  84.  
  85. #define FLOAT_OVF    010000000000
  86. #define FLOAT_UNF    004000000000
  87. #define FLOAT_DVZ    002000000000
  88. #define FLOAT_MOF    001000000000
  89.  
  90. FERR(fstat)
  91. int    fstat;
  92. {
  93.     if (fstat & FLOAT_OVF)
  94.         FEerror("Floating point overflow.",0);
  95.     if (fstat & FLOAT_UNF)
  96.         FEerror("Floating point underflow.",0);
  97.     if (fstat & FLOAT_DVZ)
  98.         FEerror("Floating point fault : zero divide.",0);
  99.     if (fstat & FLOAT_MOF)
  100.         FEerror("Floating point mantissa overflow.",0);
  101.  
  102.     FEerror("Unknown floating point error.",0);
  103. }
  104.